/*
#**************************************************************************
#  openSIS is a student information system for public and non-public 
#  schools from Open Solutions for Education, Inc. web: www.os4ed.com
#
#  openSIS is  web-based, open source, and comes packed with features that 
#  include student demographic info, scheduling, grade book, attendance, 
#  report cards, eligibility, transcripts, parent portal, 
#  student portal and more.   
#
#  Visit the openSIS web site at http://www.opensis.com to learn more.
#  If you have question regarding this system or the license, please send 
#  an email to info@os4ed.com.
#
#  This program is released under the terms of the GNU General Public License  
#  as  published by the Free Software Foundation, version 2 of the License. 
#  See license.txt.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#**************************************************************************** 
*/
using System;
using System.Data;

namespace calendar.Data
{
  public class WhereBuilder
  {
    private System.Collections.Queue elements;

    public WhereBuilder(params string[] parameters)
    {
      elements=new System.Collections.Queue(parameters);
      elements.Enqueue("");elements.Enqueue("");elements.Enqueue("");elements.Enqueue("");elements.Enqueue("");
    }

    public string GetWhere()
    {
      string first="";
      string op="";
      string second="";
      bool UsePrevOp=false;
      while(elements.Count>3){
        if(first==""){
          first=(string)elements.Dequeue();
          if(first=="("){
            first=GetWhere();
            if(first!="") first="("+first+")";
          }
        }
        op=UsePrevOp==true?op:(string)elements.Dequeue();
		if(op==")") return first;
        UsePrevOp=false;
        second=(string)elements.Dequeue();
        if(second=="("){
          second=GetWhere();
          if(second!="")
          second="("+second+")";
        }
        if(first.Trim()!=""&&second!="")
          first+=" "+op+" "+second;
        else{
          string Peek=(string)elements.Peek();
          if(first.Trim()==""&&second!="") first+=" "+second;
          if(first.Trim()!=""&&second==""&&Peek=="And") {UsePrevOp=true;elements.Dequeue();}
          if(first==""&&second==""&&Peek!=")") {first+=" ";}
        }
        if((string)elements.Peek()==")"){elements.Dequeue();return first.Trim();}
      }
	  if(first.Trim()==")") first="";
      return first.Trim();
    }
  }
}
//End CodeCharge.Data.WhereBuilder Cclass

